package com.android.common.mvp.present;

import com.android.common.base.BaseApi;
import com.android.common.network.ResponseBean;
import io.reactivex.rxjava3.core.Observable;
import java.util.List;
import java.util.Map;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Response;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Query;
import retrofit2.http.Streaming;
import retrofit2.http.Url;

public interface FileApi extends BaseApi {


    /**
     * 下载文件
     *
     * @param fileId
     */
    @Streaming
    @GET("mcp-file/downloadFile")
    Observable<ResponseBody> downloadFileRecord(@Query("id") String fileId);

    /**
     * 下载文件
     *
     * @param url
     */
    @Streaming
    @GET
    Observable<ResponseBody> download(@Url String url);//直接使用网址下载

    /**
     *
     * @param url
     * @return
     */

    /**
     * 断点下载下载文件
     *
     * @param range(Range: bytes=10-)：第10个字节及最后个字节的数据
     *                     (Range: bytes=40-100)：第40个字节到第100个字节之间的数据.
     * @param url
     */
    @Streaming
    @GET
    Observable<ResponseBody> downloadWithRange(@Header("Range") String range, @Url String url);//直接使用网址下载


    /**
     * 单个文件上传
     */
    @Multipart
    @POST("mcp-file/upload")
    Observable<Response<ResponseBean<Integer>>> uploadFile(@Query("project") String projectId, @Query("accessLevel") String accessLevel, @Part MultipartBody.Part part);

    /**
     * 批量文件上传
     */
    @Multipart
    @POST("mcp-file/uploadFiles")
    Observable<Response<ResponseBean<List<Integer>>>> uploadFiles(@Query("project") String projectId,
                                                                  @Query("accessLevel") String accessLevel,
                                                                  @PartMap Map<String, RequestBody> params);

}
